#include "PyMsg.h"

void PyMsg::set(const std::string &content)
{
	_content = content;
}

void PyMsg::pushInt(int size, int value)
{
	int offset = _content.size();
	_content.resize(offset + size);
	memcpy(&_content[offset], &value, size);
}
int PyMsg::popInt(int size)
{
	if (_offset + size > _content.size()) return 0;
	int value = 0;
	memcpy(&value, &_content[_offset], size);
	_offset += size;
	return value;
}

void PyMsg::pushStr(int size,const std::string &str)
{
	int offset = _content.size();
	_content.resize(offset + size);
	int len = size > str.size() ? str.size() : size;
	memcpy(&_content[offset], &str[0], len);
}
std::string PyMsg::popStr(int size)
{
	if (_offset + size > _content.size()) return "";
	std::string value;
	value.resize(size);
	memcpy(&value[0], &_content[_offset], size);
	_offset += size;
	return value;
}

void PyMsg::pushLong(int size, long value)
{
	int offset = _content.size();
	_content.resize(offset + size);
	memcpy(&_content[offset], &value, size);
}
long PyMsg::popLong(int size)
{
	if (_offset + size > _content.size()) return 0;
	long value = 0;
	memcpy(&value, &_content[_offset], size);
	_offset += size;
	return value;
}

void PyMsg::pushDouble(int size, double value)
{
	int offset = _content.size();
	_content.resize(offset + size);
	memcpy(&_content[offset], &value, size);
}
long PyMsg::popDouble(int size)
{
	if (_offset + size > _content.size()) return 0;
	double value = 0;
	memcpy(&value, &_content[_offset], size);
	_offset += size;
	return value;
}

void PyMsg::reset()
{
	_offset = 0;
}

std::string PyMsg::content()
{
	return _content;
}